package net.granoeste.validator.test;
import net.granoeste.validator.DateValidator;
import net.granoeste.validator.DoubleRangeValidator;
import net.granoeste.validator.EmailValidator;
import net.granoeste.validator.IntRangeValidator;
import net.granoeste.validator.JapaneseOnebyteKatakanaValidator;
import net.granoeste.validator.JapanesePhoneValidator;
import net.granoeste.validator.JapaneseTwobyteCharValidator;
import net.granoeste.validator.MaxLengthValidator;
import net.granoeste.validator.MinLengthValidator;
import net.granoeste.validator.RangeValidator;
import net.granoeste.validator.RequiredValidator;
import net.granoeste.validator.SplitTokenCountValidator;
import net.granoeste.validator.StringContainValidator;
import net.granoeste.validator.UrlValidator;
import net.granoeste.validator.Validator;
import net.granoeste.validator.Validators;
import net.granoeste.validator.test.ValidatorTest.TestActivity;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.test.suitebuilder.annotation.MediumTest;
import android.widget.EditText;
public class ValidatorTest extends android.test.ActivityUnitTestCase<TestActivity> {
public static final class TestActivity extends Activity {
}
public ValidatorTest() {
super(TestActivity.class);
}
private Context mContext;
private Intent mStartIntent;
private EditText edit;
private static final String INVALID = "invalid";
@Override
protected void setUp() throws Exception {
super.setUp();
mStartIntent = new Intent(Intent.ACTION_MAIN);
mContext = getInstrumentation().getTargetContext();
edit = new EditText(mContext);
}
@MediumTest
public void testRequiredValidator() throws Exception {
startActivity(mStartIntent, null, null);
final RequiredValidator validator = new RequiredValidator(INVALID);
// success
edit.setText("あいうえお");
assertTrue(validator.isValid(edit));
// invalid
edit.setText("");
assertFalse(validator.isValid(edit));
edit.setText(null);
assertFalse(validator.isValid(edit));
edit.setText(" ");
assertFalse(validator.isValid(edit));
edit.setText(" ");
assertFalse(validator.isValid(edit));
edit.setText(" ");
assertFalse(validator.isValid(edit));
}
@MediumTest
public void testRangeValidator() throws Exception {
final RangeValidator validator = new RangeValidator(
3, 5, INVALID);
edit.setText("あいうえお");
assertTrue(validator.isValid(edit));
edit.setText("ア イ ");
assertTrue(validator.isValid(edit));
edit.setText("1 2 3");
assertTrue(validator.isValid(edit));
edit.setText("アイウエオ");
assertTrue(validator.isValid(edit));
edit.setText("12345");
assertTrue(validator.isValid(edit));
edit.setText("ラモス");
assertTrue(validator.isValid(edit));
edit.setText("ラモス");
assertTrue(validator.isValid(edit));
edit.setText("Ramo");
assertTrue(validator.isValid(edit));
edit.setText("");
assertTrue(validator.isValid(edit));
// invalid
edit.setText("あいうえおか");
assertFalse(validator.isValid(edit));
edit.setText("1 2 3 ");
assertFalse(validator.isValid(edit));
edit.setText("アイウエオカ");
assertFalse(validator.isValid(edit));
edit.setText("ラモス 瑠偉");
assertFalse(validator.isValid(edit));
edit.setText("12");
assertFalse(validator.isValid(edit));
edit.setText("12");
assertFalse(validator.isValid(edit));
edit.setText("アア");
assertFalse(validator.isValid(edit));
edit.setText("aa");
assertFalse(validator.isValid(edit));
}
@MediumTest
public void testMaxLengthValidator() throws Exception {
final MaxLengthValidator validator = new MaxLengthValidator(
5, INVALID);
edit.setText("あいうえお");
assertTrue(validator.isValid(edit));
edit.setText("ア イ ");
assertTrue(validator.isValid(edit));
edit.setText("1 2 3");
assertTrue(validator.isValid(edit));
edit.setText("アイウエオ");
assertTrue(validator.isValid(edit));
edit.setText("12345");
assertTrue(validator.isValid(edit));
edit.setText("ラモス瑠偉");
assertTrue(validator.isValid(edit));
// invalid
edit.setText("あいうえおか");
assertFalse(validator.isValid(edit));
edit.setText("1 2 3 ");
assertFalse(validator.isValid(edit));
edit.setText("アイウエオカ");
assertFalse(validator.isValid(edit));
edit.setText("ラモス 瑠偉");
assertFalse(validator.isValid(edit));
}
@MediumTest
public void testMinLengthValidator() throws Exception {
final MinLengthValidator validator = new MinLengthValidator(
5, INVALID);
edit.setText("あいうえお");
assertTrue(validator.isValid(edit));
edit.setText("ア イ ");
assertTrue(validator.isValid(edit));
edit.setText("1 2 3");
assertTrue(validator.isValid(edit));
edit.setText("アイウエオ");
assertTrue(validator.isValid(edit));
edit.setText("12345");
assertTrue(validator.isValid(edit));
edit.setText("あいうえおか");
assertTrue(validator.isValid(edit));
edit.setText("1 2 3 ");
assertTrue(validator.isValid(edit));
edit.setText("アイウエオカ");
assertTrue(validator.isValid(edit));
edit.setText("ラモス 瑠偉");
assertTrue(validator.isValid(edit));
edit.setText("");
assertTrue(validator.isValid(edit));
// invalid
edit.setText("ラモス");
assertFalse(validator.isValid(edit));
edit.setText("ラモス");
assertFalse(validator.isValid(edit));
edit.setText("Ramo");
assertFalse(validator.isValid(edit));
}
@MediumTest
public void testUrlValidator() throws Exception {
final UrlValidator validator = new UrlValidator(INVALID);
edit.setText("http://google.com");
assertTrue(validator.isValid(edit));
edit.setText("http://google.jp");
assertTrue(validator.isValid(edit));
edit.setText("http://google.co.jp");
assertTrue(validator.isValid(edit));
edit.setText("http://goo.gl");
assertTrue(validator.isValid(edit));
edit.setText("https://goo.ch");
assertTrue(validator.isValid(edit));
edit.setText("ftp://mame.zoo");
assertTrue(validator.isValid(edit));
// invalid
edit.setText("abc-abc-abc");
assertFalse(validator.isValid(edit));
edit.setText("mame.zoo");
assertFalse(validator.isValid(edit));
edit.setText("mailto://mame.zoo");
assertFalse(validator.isValid(edit));
}
@MediumTest
public void testEmailValidator() throws Exception {
final EmailValidator validator = new EmailValidator(INVALID);
edit.setText("hogehoge@mail.com");
assertTrue(validator.isValid(edit));
edit.setText("hogehoge@mail.jp");
assertTrue(validator.isValid(edit));
edit.setText("hogehoge@mail.co.jp");
assertTrue(validator.isValid(edit));
edit.setText("hogegoge@mail.me");
assertTrue(validator.isValid(edit));
edit.setText("hogegoge123@mail.me");
assertTrue(validator.isValid(edit));
edit.setText("hoge.goge@mail.me");
assertTrue(validator.isValid(edit));
edit.setText("hoge+goge@mail.me");
assertTrue(validator.isValid(edit));
edit.setText("hoge-goge@mail.me");
assertTrue(validator.isValid(edit));
edit.setText("hoge_goge@mail.me");
assertTrue(validator.isValid(edit));
edit.setText("123hoge@mail.me");
assertTrue(validator.isValid(edit));
// invalid
edit.setText("hogehoge@mail");
assertFalse(validator.isValid(edit));
edit.setText("@mail");
assertFalse(validator.isValid(edit));
edit.setText("@mail.com");
assertFalse(validator.isValid(edit));
edit.setText("abc-abc-abc");
assertFalse(validator.isValid(edit));
edit.setText("mame.zoo");
assertFalse(validator.isValid(edit));
edit.setText("mailto://mame.zoo");
assertFalse(validator.isValid(edit));
}
@MediumTest
public void testIntRangeValidator() throws Exception {
final IntRangeValidator validator = new IntRangeValidator(
1, 10, INVALID);
edit.setText("1");
assertTrue(validator.isValid(edit));
edit.setText("10");
assertTrue(validator.isValid(edit));
edit.setText("5");
assertTrue(validator.isValid(edit));
edit.setText("007");
assertTrue(validator.isValid(edit));
edit.setText("");
assertTrue(validator.isValid(edit));
// invalid
edit.setText("1.1");
assertFalse(validator.isValid(edit));
edit.setText("9.5");
assertFalse(validator.isValid(edit));
edit.setText("0");
assertFalse(validator.isValid(edit));
edit.setText("11");
assertFalse(validator.isValid(edit));
edit.setText("-1");
assertFalse(validator.isValid(edit));
edit.setText("ABC");
assertFalse(validator.isValid(edit));
edit.setText("123");
assertFalse(validator.isValid(edit));
}
@MediumTest
public void testNumberFormatIntRangeValidator() throws Exception {
final IntRangeValidator validator = new IntRangeValidator(
1000, 5000000, INVALID);
edit.setText("1,000");
assertTrue(validator.isValid(edit));
edit.setText("5,000");
assertTrue(validator.isValid(edit));
edit.setText("1,000,000");
assertTrue(validator.isValid(edit));
edit.setText("5,000,000");
assertTrue(validator.isValid(edit));
// invalid
edit.setText("100");
assertFalse(validator.isValid(edit));
edit.setText("5,000,001");
assertFalse(validator.isValid(edit));
edit.setText("5,100,000");
assertFalse(validator.isValid(edit));
edit.setText("999,000,000");
assertFalse(validator.isValid(edit));
// irregular
edit.setText("1000,000");
assertTrue(validator.isValid(edit));
edit.setText("5000,000");
assertTrue(validator.isValid(edit));
edit.setText("500,0000");
assertTrue(validator.isValid(edit));
edit.setText("900,0000");
assertFalse(validator.isValid(edit));
}
@MediumTest
public void testDoubleRangeValidator() throws Exception {
final DoubleRangeValidator validator = new DoubleRangeValidator(
0.01d, 11.89d, INVALID);
edit.setText("0.01");
assertTrue(validator.isValid(edit));
edit.setText("11.89");
assertTrue(validator.isValid(edit));
edit.setText("1");
assertTrue(validator.isValid(edit));
edit.setText("0.1");
assertTrue(validator.isValid(edit));
edit.setText("11.0");
assertTrue(validator.isValid(edit));
edit.setText("0.011");
assertTrue(validator.isValid(edit));
edit.setText("");
assertTrue(validator.isValid(edit));
// invalid
edit.setText("-0.1");
assertFalse(validator.isValid(edit));
edit.setText("0.001");
assertFalse(validator.isValid(edit));
edit.setText("11.90");
assertFalse(validator.isValid(edit));
edit.setText("11.899");
assertFalse(validator.isValid(edit));
edit.setText("0.009");
assertFalse(validator.isValid(edit));
edit.setText("ABC");
assertFalse(validator.isValid(edit));
edit.setText("123");
assertFalse(validator.isValid(edit));
}
@MediumTest
public void testNumberFormatDoubleRangeValidator() throws Exception {
final DoubleRangeValidator validator = new DoubleRangeValidator(
0.10d, 5000000.89d, INVALID);
edit.setText("1,000.01");
assertTrue(validator.isValid(edit));
edit.setText("1,100.89");
assertTrue(validator.isValid(edit));
edit.setText("1,000");
assertTrue(validator.isValid(edit));
edit.setText("1,000.1");
assertTrue(validator.isValid(edit));
edit.setText("1,100.0");
assertTrue(validator.isValid(edit));
edit.setText("1,000.011");
assertTrue(validator.isValid(edit));
// invalid
edit.setText("0.01");
assertFalse(validator.isValid(edit));
edit.setText("500,0000.891");
assertFalse(validator.isValid(edit));
edit.setText("500,0000.9");
assertFalse(validator.isValid(edit));
edit.setText("900,0000.999");
assertFalse(validator.isValid(edit));
// irregular
edit.setText("1000,000.88");
assertTrue(validator.isValid(edit));
edit.setText("5000,000.88");
assertTrue(validator.isValid(edit));
edit.setText("500,0000.88");
assertTrue(validator.isValid(edit));
edit.setText("900,0000.88");
assertFalse(validator.isValid(edit));
}
@MediumTest
public void testDateValidator() {
final DateValidator validator = new DateValidator(INVALID);
edit.setText("1970/01/01");
assertTrue(validator.isValid(edit));
edit.setText("2020/12/31");
assertTrue(validator.isValid(edit));
// invalid
edit.setText("45/13/13");
assertFalse(validator.isValid(edit));
}
@MediumTest
public void testJapaneseOnebyteKatakanaValidator() {
final JapaneseOnebyteKatakanaValidator validator = new JapaneseOnebyteKatakanaValidator(
INVALID);
edit.setText("アイウエオ");
assertTrue(validator.isValid(edit));
edit.setText("タナカ マルクス トゥーリオ");
assertTrue(validator.isValid(edit));
edit.setText("ガギグゲゴ");
assertTrue(validator.isValid(edit));
edit.setText("パピプペポ");
assertTrue(validator.isValid(edit));
// invalid
edit.setText("田中・マルクス トゥーリオ Ⅳ世");
assertFalse(validator.isValid(edit));
edit.setText("12345");
assertFalse(validator.isValid(edit));
edit.setText("abcdefg");
assertFalse(validator.isValid(edit));
edit.setText("ラモス 瑠偉");
assertFalse(validator.isValid(edit));
}
@MediumTest
public void testJapaneseTwobyteCharValidator() {
final JapaneseTwobyteCharValidator validator = new JapaneseTwobyteCharValidator(
INVALID);
edit.setText("あいうえお");
assertTrue(validator.isValid(edit));
edit.setText("アイウエオ");
assertTrue(validator.isValid(edit));
edit.setText("1234567890");
assertTrue(validator.isValid(edit));
edit.setText("ABCDEF");
assertTrue(validator.isValid(edit));
edit.setText("αβγ");
assertTrue(validator.isValid(edit));
edit.setText("壱弐参四伍六七八九零");
assertTrue(validator.isValid(edit));
edit.setText("!”#$%&’()〜=〜|_?><』*+『`ー^");
assertTrue(validator.isValid(edit));
edit.setText("田中・マルクス トゥーリオ Ⅳ世");
assertTrue(validator.isValid(edit));
// invalid
edit.setText("アイウエオ");
assertFalse(validator.isValid(edit));
edit.setText("12345");
assertFalse(validator.isValid(edit));
edit.setText("abcdefg");
assertFalse(validator.isValid(edit));
edit.setText("ラモス 瑠偉");
assertFalse(validator.isValid(edit));
}
@MediumTest
public void testJapanesePhoneValidator() {
final JapanesePhoneValidator validator = new JapanesePhoneValidator(
INVALID);
// 国内プレフィックス:0
// 市外局番 : 1 - 4桁 <--+-- 合計5桁
// 市内局番 : 1 - 4桁 <--+
// 加入者番号: 4桁
//
// 0A-BCDE-1234
// 0AB-CDE-1234
// 0ABC-DE-1234
// 0ABCD-E-1234
// 090-1234-1234
edit.setText("01-2345-1234");
assertTrue(validator.isValid(edit));
edit.setText("012-345-1234");
assertTrue(validator.isValid(edit));
edit.setText("0123-45-1234");
assertTrue(validator.isValid(edit));
//岐阜県高山市荘川町大野郡 5769 E 9999
edit.setText("05769-6-1013");
assertTrue(validator.isValid(edit));
// 携帯電話
edit.setText("090-1234-1234");
assertTrue(validator.isValid(edit));
edit.setText("0120-444-444");
assertTrue(validator.isValid(edit));
edit.setText("0123-00-2222");
assertTrue(validator.isValid(edit));
edit.setText("1234-444-444");
assertTrue(validator.isValid(edit));
// invalid
edit.setText("abc-abc-abc");
assertFalse(validator.isValid(edit));
edit.setText("0123444555");
assertFalse(validator.isValid(edit));
}
@MediumTest
public void testSplitTokenCountValidator() {
final int ge = SplitTokenCountValidator.GE;
final int gt = SplitTokenCountValidator.GT;
final int le = SplitTokenCountValidator.LE;
final int lt = SplitTokenCountValidator.LT;
final int ne = SplitTokenCountValidator.NE;
final String regex = ",";
final int count = 3;
SplitTokenCountValidator validator = null;
// EQ
validator = new SplitTokenCountValidator(regex, count, INVALID);
edit.setText("abc,def,1.23");
assertTrue(validator.isValid(edit));
// invalid
edit.setText("abc.abc.abc");
assertFalse(validator.isValid(edit));
edit.setText("abc,abc");
assertFalse(validator.isValid(edit));
edit.setText("abc,abc,abc,abc");
assertFalse(validator.isValid(edit));
// GE
validator = new SplitTokenCountValidator(regex, count, ge, INVALID);
edit.setText("abc,def,ghi");
assertTrue(validator.isValid(edit));
edit.setText("abc,def,ghi,jkl");
assertTrue(validator.isValid(edit));
edit.setText("abc,def");
assertFalse(validator.isValid(edit));
// GT
validator = new SplitTokenCountValidator(regex, count, gt, INVALID);
edit.setText("abc,def,ghi");
assertFalse(validator.isValid(edit));
edit.setText("abc,def,ghi,jkl");
assertTrue(validator.isValid(edit));
edit.setText("abc,def");
assertFalse(validator.isValid(edit));
// LE
validator = new SplitTokenCountValidator(regex, count, le, INVALID);
edit.setText("abc,def,ghi");
assertTrue(validator.isValid(edit));
edit.setText("abc,def,ghi,jkl");
assertFalse(validator.isValid(edit));
edit.setText("abc,def");
assertTrue(validator.isValid(edit));
// LT
validator = new SplitTokenCountValidator(regex, count, lt, INVALID);
edit.setText("abc,def,ghi");
assertFalse(validator.isValid(edit));
edit.setText("abc,def,ghi,jkl");
assertFalse(validator.isValid(edit));
edit.setText("abc,def");
assertTrue(validator.isValid(edit));
// NE
validator = new SplitTokenCountValidator(regex, count, ne, INVALID);
edit.setText("abc,def,ghi");
assertFalse(validator.isValid(edit));
edit.setText("abc,def,ghi,jkl");
assertTrue(validator.isValid(edit));
edit.setText("abc,def");
assertTrue(validator.isValid(edit));
}
@MediumTest
public void testStringContainValidator() {
final String[] elements = {
"abc", "def", "ghi"
};
StringContainValidator validator;
validator = new StringContainValidator(elements, INVALID);
edit.setText("xyzabc123def");
assertTrue(validator.isValid(edit));
edit.setText("xyz123");
assertFalse(validator.isValid(edit));
validator = new StringContainValidator("+,-,*,/,@", INVALID);
edit.setText("p@ssw*rd");
assertTrue(validator.isValid(edit));
edit.setText("password");
assertFalse(validator.isValid(edit));
final char[] charElements = new char[] {
'1', '+', '-', '*', '/', '@'
};
validator = new StringContainValidator(charElements, 4, INVALID);
edit.setText("p@ssw*rd");
assertFalse(validator.isValid(edit));
edit.setText("password");
assertFalse(validator.isValid(edit));
edit.setText("p@++w*rd");
assertTrue(validator.isValid(edit));
edit.setText("p@++w*r/");
assertTrue(validator.isValid(edit));
}
@MediumTest
public void testCombination() {
final EditText name = new EditText(mContext);
final EditText age = new EditText(mContext);
final EditText phone = new EditText(mContext);
final Validators validators = new Validators();
validators.put(name, new Validator[] {
new RequiredValidator("RequiredValidator"),
new JapaneseTwobyteCharValidator("JapaneseTwobyteCharValidator"),
});
validators.put(age, new Validator[] {
new RequiredValidator("RequiredValidator"),
new IntRangeValidator(18, 100, "IntRangeValidator"),
});
validators.put(phone, new Validator[] {
new JapanesePhoneValidator("JapanesePhoneValidator"),
});
name.setText("山田太郎");
age.setText("21");
phone.setText("090-1234-1234");
validators.clearError();
validators.isValid();
assertNull(name.getError());
assertNull(age.getError());
assertNull(phone.getError());
name.setText("YAMADA");
age.setText("10");
phone.setText("AAA-AAA-1234");
validators.clearError();
validators.isValid();
assertNotNull(name.getError());
assertNotNull(age.getError());
assertNotNull(phone.getError());
name.setText(null);
age.setText("");
phone.setText("");
validators.clearError();
validators.isValid();
assertNotNull(name.getError());
assertNotNull(age.getError());
assertNull(phone.getError());
}
}